from lxml import etree
test = '''
<html lang="zh-CN">
<head>
    <meta charset='UTF-8'>
    <title>学习猿地 - 成就自己的只需一套精品</title>
</head>
<body>
    <ul class="menu">
        <li><a href="/a/b/c/java/">java工程师</a></li>
        <li><a href="/a/b/c/python/">python工程师</a></li>
        <li><a href="/a/b/c/AI/">AI工程师</a></li>
    </ul>
    <div>
        <ul>
            <li><a href="/1/">董</a>></li>
            <li><a href="/2/">景</a>></li>
            <li><a href="/3/">园</a>></li>
        </ul>
    </div>
</body>
</html>
'''

'''第二种方法 读取一个html文件并解析 使用etree解析html字符串'''
html = etree.HTML(test)
# print(html)   返回<Element html at 0x1df3cb95d80>

# 提取数据
r = html.xpath('/html/body/ul/li/a/text()')
print(r)      #返回['java工程师', 'python工程师', 'AI工程师']

r2 = html.xpath('/html/body/ul/li[1]/a/text()')
print(r2)      #返回li的下标

'''第二种方法 读取一个html文件并解析'''
html2 = etree.parse('./html.html',etree.HTMLParser())
#print(html2)
result = etree.tostring(html2)  # 转成而二进制
# 提取数据
r3 = html2.xpath('/html/body/ul/li/a/text()')
print(r3)
# 使用//提取数据  获取页面中所有的Li里面的数据
r4 = html2.xpath('//li/a/text()')
print(r4)

'''获取指定标签里面的li数据'''
r4 = html2.xpath('//div[@class="teach"]//li/a/text()')
r5 = html2.xpath('//div[@class="teach"]//li/a/@href')
print(list(zip(r4,r5)))

# 第三种方法： 有的时候 某些节点的某个属性可能有多个值
text = '''
<li class="li li-first"><a href="link.html">first item</a></li>
'''
html_2 = etree.HTML(text)
re = html_2.xpath('//li[contains(@class,"li")]/a/text()')
print(re)

text = '''
<li class="li li-first" name="item"><a href="link.html">first item</a></li>
'''
html_3 = etree.HTML(text)
re2 = html_3.xpath('//li[contains(@class,"li") and @name="item"]/a/text()')
print(re2)